package com.xia.rocket;

import com.xia.domain.OperationLog;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;

@Service
public class RocketMQProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    private final String topic = "com-xia-rocket";

    // 单向发送消息
    // 单向发送是指发送方只负责发送消息，不关心服务器的响应。该方式适用于对可靠性要求不高的场景，如日志收集。
    public void sendOneWayMessage(OperationLog log){
        // logUtils.wrapLog用来封装日志对象
        rocketMQTemplate.sendOneWay(topic, MessageBuilder.withPayload(log).build());

    }

    // 1.同步发送消息
    // 同步发送是指发送方发送一条消息后，会等待服务器返回确认信息后再进行后续操作。这种方式适用于需要可靠性保证的场景。
//    public void sendSyncMessage(OperationLog log){
//        SendResult sendResult = rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(log).build());
//        System.out.println(sendResult.getMsgId());
//        System.out.printf("同步发送结果: %s\n", log);
//    }
}

